package com.xjh.basestudy.designmode.structureMode.structureMode3_Decorator.p2_shelfDecorator;

import com.xjh.basestudy.designmode.structureMode.structureMode2_Composite.File;
import com.xjh.basestudy.designmode.structureMode.structureMode3_Decorator.p1_origin.Girl;
import com.xjh.basestudy.designmode.structureMode.structureMode3_Decorator.p1_origin.Showable;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.zip.ZipInputStream;

/**
 * @Author XuJianHua
 * @Date 2022/9/26 22:34
 * @Description 客户端类的第4行中出现了多层的构造方法操作，接着在第5行只调用装饰好的madeupGirl对象的展示方法show()，
 * 所有装饰效果一触即发，层层递归。需要注意的是一系列构造产生的顺序，我们最终得到的madeupGirl对象本质上引用的是口红，口红里包裹了粉底，粉底里又包裹了女生，正如第6行运行结果所示的化妆效果一样。
 */
public class Client {
    public static void main(String[] args) throws FileNotFoundException {
        //口红包裹粉底，粉底再包裹女生
        Showable madeupGirl = new Lipstick(new FoundationMakeup(new Girl()));
        madeupGirl.show();
        //运行结果：涂口红【打粉底【女生的脸庞】】

        // 真实场景应用：文件流装饰器
        File file = new File("/压缩包.zip");
        //开始装饰
        ZipInputStream zipInputStream = new ZipInputStream(
                new BufferedInputStream(
                        new FileInputStream(String.valueOf(file))
                )
        );
    }
}